<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 浅复制
    // 引用类型的赋值属于浅复制 -> 将一个变量对内存的引用地址 赋值给另一个变量 => 引用同一片内存空间 只要一个改动 另一个也会有影响
    // var arr = [1, 2, 3];
    // var brr = arr;
    // console.log(arr === brr); // true

    // 深复制 => 得到一个与原数组元素相同的新数组

    // a. 浅拷贝
    // (1) 创建一个新数组 遍历原数组,将每个元素放到新数组中
    // (2) 借助数组的方法 slice()  concat()  map()


    // var arr = [1, 2, 3, 4];
    // var list = [];
    // for (var i = 0; i < arr.length; i++) {
    //     var item = arr[i]; // 1, 2, 3, 4
    //     list.push(item);
    // }
    // console.log(list);

    //  (2) 借助数组的方法 slice()  concat()  map()
    // var arr = [1, 2, 3, 4];
    // var list = arr.slice();
    // var list = arr.concat();
    // var list = arr.map(function (item) {
    //     return item;
    // })
    // console.log(arr, list, arr === list);


    // 问题:  之前的写法属于浅拷贝,只复制一层,如果存在二维数组,或对象 => 将二维数组或对象的引用地址放到新数组中
    // var arr = [1, 2, 3, 4, [5, 6, 7]];
    // var list = [];
    // for (var i = 0; i < arr.length; i++) {
    //     var item = arr[i]; // 1, 2, 3, 4, [5, 6, 7]
    //     list.push(item);
    // }
    // console.log(arr, list, arr === list);  // false
    // console.log(arr[4], list[4], arr[4] === list[4]); // true


    // 深拷贝  => 又一层就拷贝一层

    // var arr = [1, 2, 3, 4, [5, 6, 7]];
    // var list = [];
    // for (var i = 0; i < arr.length; i++) {
    //     var item = arr[i]; // 1, 2, 3, 4, [5, 6, 7]
    //     if (Array.isArray(item)) { // 是数组  [5,6,7]

    //         var list1 = [];
    //         for (var j = 0; j < item.length; j++) {
    //             var item1 = item[j]; // 5 6 7
    //             if (Array.isArray(item1)) { // 是数组

    //             } else {
    //                 list1.push(item1);
    //             }
    //         }

    //         list.push(list1);


    //     } else {
    //         list.push(item);
    //     }
    // }

    // console.log(arr, list, arr === list);  // false
    // console.log(arr[4], list[4], arr[4] === list[4]); // false


    debugger;
    function deepCopy(arr) {  // [ 1, 2, 3, 4, [5, 6, 7]]

        var list = [];
        for (var i = 0; i < arr.length; i++) {
            var item = arr[i]; //  1, 2, 3, 4, [5, 6, 7]
            if (Array.isArray(item)) { // 是数组  [5,6,7]

                var newArr = deepCopy(item); // [5, 6, 7]
                list.push(newArr);

            } else {
                list.push(item);
            }
        }

        return list;
    }
    var arr = [1, 2, 3, 4, [5, 6, 7]];
    var list = deepCopy(arr);
    console.log(arr, list, arr === list);  // false
    console.log(arr[4], list[4], arr[4] === list[4]); // false






</script>

</html>